Seminário de LP Python 1/2015 - Grupo.
Integrantes do grupo *''André Bezerra'' *''Leandro Araujo'' *''Luiz Carlos Jr'' 'Visão Geral' Python é uma linguagem alto nível, interpretada, interativa, multiparadigma: podendo ser funcional, imperativa ou orientada a objetos. Site oficial: https://www.python.org/ 'História' *Python foi desenvolvido no instituto de pesquisa em Amsterdam chamado CWI (Centro para Matemática e Ciência da Computação) por Guido van Rossum . *Guido começou a trabalhar no CWI no final de 82 , como programador do grupo ABC e posteriormente trabalhou no grupo Amoeba e por final no grupo multimidia. *"Python é um produto direto da minha experiência no CWI. ABC me deu a inspiração crucial para Python, Amoeba a motivação imediata e o grupo de multimídia fomentou seu crescimento". Guido van Rossum *Necessidade de uma linguagem de alto nível no projeto Amoeba, pois o desenvolvimento de utilitários para administração de sistema em C tomava muito tempo. *"preencher o vazio entre C e o shell Bourne". *"decidi projetar uma linguagem por mim mesmo a qual poderia pegar tudo que gostei de ABC enquanto, ao mesmo tempo, consertar todos seus problemas (como os percebia)." *Código da linguagem ABC (abaixo) podemos ver que alguns elementos de sintaxe ,por exemplo, a indentação obrigatória do Python foram inspiradas nesta linguagem. Exemplo em ABC: HOW TO RETURN words document PUT {} IN collection FOR line IN document: FOR word IN split line: IF word not.in collection: INSERT word IN collection RETURN collection Exemplo em Python: list_of_lists = [ 2, 3, 5, 6, 8, 9] for list in list_of_lists: for x in list: print x Versão: Atualmente existe em duas versões paralelas: 2.7.8 e 3.4.x (fase de transição); -'Linha do tempo do Python' PROJETO ForensicsPY Esse projeto tem por objetivo disponibilizar ferramentas forenses de utilidade corriqueira para usuários comuns, sem necessidade de profundo conhecimento técnico. O programa (incluindo o código fonte) pode ser baiado aqui. Espera-se que novas versões sejam lançadas, implementado melhorias progressivamente. O código possui licença GPL, e toda contribuição é bem vinda. 'Premissas:' * Sintaxe clara e concisa * Legibilidade e produtividade * Estruturas de alto nível * Diversidade de módulos e frameworks * Multiparadigma – modular, funcional, orientação a objetos 'Usuários:' * ForensicsPY é um programa para o ser humano médio - usuário comum. * O usuário comum consegue, por meio de instruções claras, recuperar arquivos e extrair metadados de forma simples. 'Domínio de Aplicação:' PYTHON * Web * Interface gráfica (GUI) * Computação científica * Desenvolvimento de software * Banco de dados * Jogos * Gráficos 3D * Administração de sistemas: Módulo socket Permite fazer conexões de rede Ex.: import socket socket.setdefaulttimeout(2) # define o timeout da conexão s =socket.socket() # declara variável da classe socket s.connect(("192.168.95.148",21)) # conecta no socket ans =s.recv(1024) # lê 1024 bytes do socket print ans ForensicsPY * Administração de sistemas ** Segurança da informação *** Forense digital Construtores Palavras Revervadas Tipos de dados Declarações * atribuições: o nome a esquerda refere-se ao resultado do lado direito X = 4 * 5 * variáveis não têm valores fixos e possuem o tipo do conteúdo atual. * identificadores: iniciados por letras; * case sensitive Operadores * Aritméticos: a + b; a-b; a*b; a/b; a%b; a**b - + e * podem ser usados em strings * Lógicos: and, or e not * Condicionais: a b; a != b; a < b; a >= b; Comandos for, if/else/elif, while for x in range(5): print(x) if x > 5: print(x) elif x 2: x = x – 3 else x = 0 while x > 0: ... break... continue 'Avaliação da linguagem' Legibilidade * O Python é uma linguagem bastante legível, sendo uma das suas premissas no desenvolvimento da mesma. * Utiliza a identação como obrigatório no desenvolvimento do código. utilizam-se desse recurso tornando desnecessário o uso de certos identificadores de blocos ("begin" e/ou "end"), além de facilitar na leitura do código. * A sintaxe do Python não utiliza caracteres não alfabéticos @&$.Utiliza (), [], {}, ", ',: , a vírgula e o ponto final. Exemplo: Alunos='maria','pedro','fernanda','felipe' print 'SIM' if 'maria' in Alunos else 'Nao' Capacidade de escrita Simplicidade e ortogonalidade * Phyton tem por objetivo ser minimalista e possui menos instruções básicas e palavras reservadas, o que contribui para o seu fácil aprendizado. * Possui um conjunto reduzido de estruturas de controle, de forma a reduzir a complexidade da linguagem. * É uma linguagem de alto nível, com alta capacidade de abstração o que torna essa simplicidade poderosa e expressiva. Em C #include int main(){ char nome200; printf("Digite seu nome: "); scanf("%s", nome); printf("\n %s, Seja bem vindo(a)\n", nome); return 0; } Em JAVA public class Hello{ public static void main(String args[]) { java.util.Scanner s = new java.util.Scanner(System.in); System.out.print("Digite seu nome:"); String nome = s.nextLine(); System.out.println("\n" + nome + ", Seja bem vindo(a) :)\n"); } } Em Python nome = raw_input('Digite seu nome: ') print ("\n%s, Seja bem vindo(a) :)\n" % nome); Suporte para abstração * O suporte para abstração em uma linguagem está relacionado a capacidade de definição de novos tipos de dados abstratos. Além disso, também está relacionada com a possibilidade de se abstrair um processo utilizando funções e procedimentos. * O paradigma orientado a objetos funde esses dois conceitos ao permitir a definição de classes, com suas propriedades e métodos. Exemplo: class B: n = 2 def f(self,x): return B.n*x class C(B): def f(self,x): return B.f(self,x)**2 def g(self,x): return self.f(x)+1 Sintaxe * Sintaxe Python foi desenvolvido para ser uma linguagem concisa e de fácil leitura, com um visual agradável, freqüentemente usando palavras e não pontuações como em outras linguagem. Confiabilidade Manipulação de exceções * Python tem o suporte nativo ao tratamento de exceções, incluindo a definição de novos tipos de exceção. As exceções definidas pelo usuário utilizam o conceito de herança da orientação a objetos. Exception é a classe base na qual todas as outras exceções são derivadas. E como existe a unificação entre classes e tipos, e subclasses são subtipos, ao tratar uma exceção de um determinada classe todas as subclasses dessa exceção também serão tratadas. Custo Custo de treinamento e para escrever programas * O custo de treinamento e o custo para escrever programas em Python é baixo, uma vez que a que capacidade de escrita e a legibilidade é alta. Custo para compilar e executar programas * O custo de compilação e execução é alto. As instruções do código-fonte são traduzido em um formato intermediário conhecido como bytecode e depois esse bytecode quem é interpretado. Outros Portabilidade * A implementação padrão do Python é escrita em ANSI C portável, compila e executa em praticamente todas as principais plataformas em uso atualmente. Por exemplo, os programa em Python são executados em tudo, de mobile até supercomputadores. Qualidade da Definição * Python é uma linguagem open source com uma comunidade ampla espalhada pelo mundo, portanto a documentação é muito bem definida, podendo ser encontrada a original em inglês através site oficial, www.pyhton.org, e em português através do site www.python.org.br Integração de componentes * Python pode chamar bibliotecas de C/C++, pode ser chamado a partir de programas em C/C++, pode ser integrado com componenetes Java, .NET e pode se comunicar com o shell do Unix. Especificidades Módulo PIL: # Extrai coordenadas GPS dos dados EXIF de uma figura from PIL import Image from PIL.ExifTags import TAGS def testForExif(imgFileName): try: exifData ={} imgFile =Image.open(imgFileName) info =imgFile._getexif() if info: for (tag, value) in info.items(): decoded =TAGS.get(tag, tag) exifDatadecoded =value exifGPS =exifData'GPSInfo' if exifGPS: print '* ' +imgFileName +\ ' contains GPS MetaData' except: pass Módulo PyPDF: # Extrai metadados de arquivos PDF import pyPdf import optparse from pyPdf import PdfFileReader def printMeta(fileName): pdfFile =PdfFileReader(file(fileName, 'rb')) docInfo =pdfFile.getDocumentInfo() print '* PDF MetaData For: ' +str(fileName) for metaItem in docInfo: print '+ ' +metaItem +':'+docInfometaItem def main(): {...} Shell linux: Módulo OS – permite interagir com o sistema operacional. os.system("cat arq.txt | grep 'www\..*\.com\.br' > url.txt") # copia todas as linhas com url no domínio ".com.br" para o arquivo "url.txt" Foremost – recupera arquivos de um disco – independe de fylesystem'' foremost -t zip -i imagem.dd -o resultado # Recupera os arquivos ".zip" da imagem e salva no diretório "resultado" Paradigmas * '''Imperativa (projeto)' * Orientada a objetos * Funcional Ex.: >>> soma = lambda x,y:x+y >>> soma(2,3) 5 Referências 1. O'CONNOR, T. J. Violent Python – A cook book for hackers, forensic analysts, penetration testers and security engineers. Waltham, MA, USA. Ed. Elsevier:2013. 2. BORGES, Luiz Eduardo. Python para desenvolvedores. Rio de Janeiro. Edição do autor: 2009. 3. https://www.python.org/. Acesso em: 15 jun 2015. 4. http://eriberto.pro.br/wiki/index.php?title=Forense_caso_00. Acesso em 15 jun 2015. 5. http://www.ibm.com/developerworks/br/library/os-python1/.Acesso em 15 jun 2015.